跳到主要内容

Electron 里的 Service Worker、通知权限、自动填充和 Chrome 有什么不同?

考察点​

  • 不要把浏览器里能用的能力原样假设到 Electron
  • 本地协议要额外开特权

参考答案​

1. Service Worker​

Chromium 支持 Service Worker,但页面如果是 file://,注册会失败。要用自定义协议,并在 registerSchemesAsPrivileged 里把该 scheme 配成标准、安全、支持 fetch 的源。

桌面应用的离线能力通常不需要 Service Worker:资源本来就在安装包里。用它做缓存时,退出登录必须 clearStorageData 带上 serviceworkers 和 cachestorage,否则旧 worker 继续拦截请求。

开发时 worker 缓存很容易让你看到旧页面。本地应用优先关缓存或在开发态不注册。

2. 通知权限​

页面里的 Notification.requestPermission() 不会弹出和 Chrome 一样可靠的条。主进程要在 setPermissionRequestHandler 里对 notifications 表态。后台提醒更直接用主进程的 Notification 模块,不依赖页面没被回收。

3. 自动填充和翻译​

Chrome 的密码自动填充、翻译、账号同步不在 Electron 里。输入框不会有浏览器那套密码气泡。要记密码就自己做,并且秘密放在主进程的 safeStorage,不要学习浏览器把密码放进渲染进程的存储。

拼写检查是有的,webPreferences.spellcheck 默认开着,会带来词典下载和右键菜单项。不需要就关掉。

4. 扩展​

session.loadExtension 能加载一部分扩展,不是完整的 Chrome 网上应用店环境,Manifest V3 的能力也不齐全。产品功能不要建立在“用户自己装扩展”上。

面试话术​

运行的是 Chromium,但不是 Chrome。file 协议注册不了 Service Worker,本地应用也通常不需要它;真用了,退出登录要把 worker 和 cache storage 清掉。网页通知要权限 handler,后台通知放主进程。没有浏览器的密码填充和翻译,凭据自己用 safeStorage 管。

常见追问​

  • PWA 安装在 Electron 里有意义吗? 没有。你已经是安装包了。不要再做一套 beforeinstallprompt。
  • IndexedDB 能用吗? 能,和 Chrome 类似,但是按 session / partition 隔离。清数据时记得带上。